package org.spring.springboot.config.limit;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/** @author xxw 2020.3.19
 * 定义限流器接口注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestRateLimiter {
	 /**
     * 每秒创建令牌个数，默认:3
     */
    double QPS() default 2D;

    /**
     * 获取令牌等待超时时间 默认:1000
     */
    long timeout() default 1000;

    /**
     * 超时时间单位 默认:毫秒
     */
    TimeUnit timeunit() default TimeUnit.MILLISECONDS;

    /**
     * 无法获取令牌返回提示信息 弃用
     */
    String msg() default "请稍后再试！";
    /**
     * 1启用缓存 0不启用缓存  启用缓存后可以在被限流后得到托底数据
     */
    int cache() default 0;
    /**
     *指定参数作为缓存key 请示逗号隔开  比如 ort,dst 参数为null时会被改为""
     */
    String cacheKeyParameter() default "";
    /**
     *指定参数作为缓存key 名字
     */
    String cacheKeyName() default "";
    /**
     *托底数据的缓存时间 毫秒单位
     */
    long cacheTimeout() default 15*60*1000;
}
